# 2.2 变量 ## `net`(线网类型) 1. `net`型变量相当于硬件电路中的各种**物理连接**,其特点是**输出的值紧跟输入值的变化而变化**。常见的有`wire`、`tri`、`wand`、`supply0`等。 举例:网络型变量L的值由与门的驱动信号`a`和`b`所决定,即`L=a&b`。当`a`、`b`的值发生变化时,线网`L`的值会立即跟着变化。 ![image1](../../../../resources/763d4c4c8ae648dc83dcf32a7c04bc1d.png) 2. `wire`是最常用的`net`型变量。 ```verilog // 格式 wire [n-1:0] var1, var2,...; // 举例 wire L; wire [7:0] databus; ``` 3. 驱动方式: - 在结构描述中将其连接到一个门元件或模块的输出端; - 用持续赋值语句`assign`对其进行赋值。 ## `variable`(变量类型) 1. **注意**:教科书采用的Verilog-1995标准,`variable`型变量称为`register`型(寄存器型);在Verilog-2001标准中将`register`一词改为了`variable`,以避免初学者将`register`和硬件中的寄存器概念混淆起来。 2. `variable`类型变量必须放在过程语句(如`initial`、`always`)中,通过过程赋值语句赋值;在`always`、`initial`等过程块内被赋值的信号也必须定义成`variable`型。 3. 常见的`variable`型变量有`reg`、`integer`、`time`、`real`、`realtime`等。这些类型是指抽象描述,不对应具体硬件,在综合器进行综合时根据具体情况来确定是映射成连线还是映射为触发器或寄存器。 | 类型 | 说明 | |---------|--------------------------------| | `reg` | 常用的寄存器型变量(可定义位宽) | | `integer` | 32位有符号整数型变量 | | `real` | 64位有符号实数型变量 | | `time` | 64位无符号时间变量 | 4. `reg`是最常用的`variable`型变量。 ```verilog // 格式 reg [n-1:0] var1, var2,...; // 举例 reg clock; reg [3:0] counter; ``` ## 标量与向量 1. 宽度为1位的变量也称为标量,如果在变量声明中没有指定位宽,则默认为标量(1位) 2. 线宽大于1位的变量也称为向量(vector),其宽度采用`[msb:lsb]`定义。 3. 位选择和域选择:在表达式中可任意选中向量中的一位(位选择)或相邻几位(域选择)。举例如下: ```verilog reg [7:0] a, b; reg [3:0] c; reg d; d = a[7] & b[7]; //位选择 c = a[7:4] + b[3:0]; //域选择 c = a\[7:4\] + b\[3:0\]; //域选择 ```